package view.ventanas_principales.panels;

import java.awt.Color;
import java.awt.Component;
import java.awt.Font;
import java.awt.ScrollPane;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.List;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.border.BevelBorder;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
import javax.swing.table.TableRowSorter;

import model.Area;
import model.Curso;
import model.comunication.IArea;
import model.comunication.ICurso;

import org.eclipse.wb.swing.FocusTraversalOnArray;

import view.cursada.CrearCursada;
import view.cursos.AltaCurso;
import view.cursos.ConsultarCurso;
import view.usuarios.FormatoCelda;

public class CursosPanel extends JPanel {
	/**
	 * 
	 */
	private static final long serialVersionUID = 8968021869212621443L;
	private JButton btnNuevoCurso;
	private JButton btnConsultaDeCursos;
	private JButton btnConsultaDeCursada;
	private ScrollPane scrollPane;
	private JTable tableCursos;
	private JScrollPane scrollPane_2;
	private ICurso cmmCurso;
	private DefaultTableModel modeloCursos;
	private IArea cmmArea;
	private JCheckBox chckbxEliminados;

	public CursosPanel() {
		addComponentListener(new ComponentAdapter() {
			@Override
			public void componentShown(ComponentEvent arg0) {
				refresh(tableCursos, false);

			}
		});
		setBorder(new BevelBorder(BevelBorder.LOWERED, Color.BLACK, null, null, null));
		inicialize();
	}

	private void inicialize() {
		cmmArea = IArea.getInstance();
		cmmCurso = ICurso.getInstance();
		this.setLayout(null);

		btnNuevoCurso = new JButton("Nuevo Curso");

		JButton btnNuevoCurso = new JButton(" Nuevo Curso");
		btnNuevoCurso.setFont(new Font("Tahoma", Font.BOLD, 11));
		btnNuevoCurso.setIcon(new ImageIcon(CursosPanel.class.getResource("/Icon_/Curso_32.png")));
		btnNuevoCurso.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				AltaCurso newCurso = new AltaCurso();
				newCurso.setVisible(true);
			}
		});
		btnNuevoCurso.setBounds(10, 31, 180, 40);
		this.add(btnNuevoCurso);
		JButton btnNuevaCursada = new JButton(" Nueva Cursada");
		btnNuevaCursada.setEnabled(false);
		btnNuevaCursada.setIcon(new ImageIcon(CursosPanel.class.getResource("/Icon_/clipboard_16.png")));
		btnNuevaCursada.setFont(new Font("Tahoma", Font.BOLD, 11));
		btnNuevaCursada.setBounds(10, 317, 180, 40);
		this.add(btnNuevaCursada);

		btnConsultaDeCursos = new JButton("Consulta de Cursos");
		btnConsultaDeCursos.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				// Busco la fila seleccionada fila y nombre de Cursos
				int fila = tableCursos.getSelectedRow();
				int columna = 1;// para que siempre busque por columna nombre
				if (tableCursos.isCellSelected(fila, columna)) {

					String nombreCurso = String.valueOf(tableCursos.getValueAt(fila, columna));

					Curso curso = cmmCurso.getCurso(nombreCurso);
					ConsultarCurso consltCurso = new ConsultarCurso(curso);
				}
			}
		});

		btnConsultaDeCursos.setFont(new Font("Tahoma", Font.BOLD, 11));
		btnConsultaDeCursos.setIcon(new ImageIcon(CursosPanel.class.getResource("/Icon_/Curso_32.png")));
		btnConsultaDeCursos.setBounds(10, 82, 180, 40);

		this.add(btnConsultaDeCursos);

		btnConsultaDeCursada = new JButton("Consulta de Cursada");
		btnConsultaDeCursada.setBounds(10, 187, 160, 40);

		JButton btnConsultaDeCursada = new JButton(" Consulta de Cursada");
		btnConsultaDeCursada.setEnabled(false);
		btnConsultaDeCursada.setIcon(new ImageIcon(CursosPanel.class.getResource("/Icon_/clipboard_16.png")));
		btnConsultaDeCursada.setFont(new Font("Tahoma", Font.BOLD, 11));
		btnConsultaDeCursada.setBounds(10, 266, 180, 40);

		this.add(btnConsultaDeCursada);

		chckbxEliminados = new JCheckBox("Eliminados");
		chckbxEliminados.addItemListener(new ItemListener() {
			public void itemStateChanged(ItemEvent arg0) {
				if (chckbxEliminados.isSelected() == true) {
					refresh(tableCursos, true);
					FormatoCelda mr = new FormatoCelda(2);
					tableCursos.setDefaultRenderer(Object.class, mr);
				} else {
					refresh(tableCursos, false);
				}
			}
		});

		chckbxEliminados.setBounds(242, 296, 97, 23);
		add(chckbxEliminados);

		JButton btnDarAltaBaja = new JButton("Alta/Baja");
		btnDarAltaBaja.setFont(new Font("Tahoma", Font.BOLD, 11));
		btnDarAltaBaja.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				int fila = tableCursos.getSelectedRow();
				if (fila >= 0) {
					String dato = (String) modeloCursos.getValueAt(fila, 2);

					if (dato.equals("no")) {
						darDeBajaAlta("si");// da de baja
					} else {
						darDeBajaAlta("no");// da de alta
					}

					if (chckbxEliminados.isSelected() == false) {
						chckbxEliminados.setSelected(true);
					}
					refresh(tableCursos, true);
					FormatoCelda mr = new FormatoCelda(2);
					tableCursos.setDefaultRenderer(Object.class, mr);
				}

			}
		});
		btnDarAltaBaja.setBounds(10, 133, 180, 40);
		add(btnDarAltaBaja);

		scrollPane_2 = new JScrollPane();
		scrollPane_2.setBounds(245, 11, 366, 278);
		add(scrollPane_2);

		tableCursos = new JTable();
		tableCursos.setModel(new DefaultTableModel(new Object[][] {}, new String[] { "id", "Nombre", "Area", "Baja" }));
		tableCursos.getTableHeader().setReorderingAllowed(false);
		tableCursos.getColumnModel().getColumn(0).setPreferredWidth(0);
		tableCursos.getColumnModel().getColumn(0).setMinWidth(0);
		tableCursos.getColumnModel().getColumn(0).setMaxWidth(0);
		scrollPane_2.setViewportView(tableCursos);

		setFocusTraversalPolicy(new FocusTraversalOnArray(new Component[] { btnNuevoCurso, btnNuevaCursada, btnConsultaDeCursos, btnConsultaDeCursada }));
		modeloCursos = (DefaultTableModel) tableCursos.getModel();

		// Para obtener que las columnas filtren por orden alfabetico
		final DefaultTableModel modeloCursos = (DefaultTableModel) tableCursos.getModel();
		// System.out.println(modeloUsuarios.getColumnClass(2));
		TableRowSorter<TableModel> rowSorter = new TableRowSorter<TableModel>(modeloCursos);
		tableCursos.setRowSorter(rowSorter);

		JButton btnActualizar = new JButton("actualizar");
		btnActualizar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				refresh(tableCursos, false);
			}
		});
		btnActualizar.setBounds(345, 296, 89, 23);
		add(btnActualizar);

		JButton button = new JButton(" Crear Cursada");
		button.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				int fila = tableCursos.getSelectedRow();
				if (fila >= 0) {
					Integer dato = (Integer) modeloCursos.getValueAt(fila, 0);

					Curso curso = cmmCurso.getCurso(dato);
					CrearCursada crearCursada = new CrearCursada(curso);
					crearCursada.setVisible(true);
				}

			}
		});
		button.setFont(new Font("Tahoma", Font.BOLD, 11));
		button.setIcon(new ImageIcon(CursosPanel.class.getResource("/Icon_/Curso_32.png")));
		button.setBounds(10, 215, 180, 40);
		add(button);

		setFocusTraversalPolicy(new FocusTraversalOnArray(new Component[] { btnNuevoCurso, btnNuevaCursada, btnConsultaDeCursos, btnConsultaDeCursada }));

	}

	public void llenarTabla(boolean bool) {// true=llena los de alta--false=llena los de baja
		String desicion;
		if (bool == true) {
			desicion = "no";
		} else {
			desicion = "si";
		}

		List<Curso> cursos = cmmCurso.getAllCursos();

		for (Curso curso : cursos) {
			Area area = cmmArea.getArea(curso.getId());

			Object[] arreglo = { curso.getId(), curso.getNombre(), area.getNombre(), desicion };
			if (curso.getEliminado().equals(desicion)) {
				modeloCursos.addRow(arreglo);
			}

		}

	}

	public void refresh(JTable tabla, boolean b) {// true agrega los eliminados
		DefaultTableModel m = (DefaultTableModel) tabla.getModel();
		m.setRowCount(0);
		llenarTabla(true);
		if (b == true)
			llenarTabla(false);
	}

	public void darDeBajaAlta(String bajaAlta) {
		int fila = tableCursos.getSelectedRow();
		int columna = 1;// para que siempre busque por columna nombre
		if (tableCursos.isCellSelected(fila, columna)) {

			String Dato = String.valueOf(tableCursos.getValueAt(fila, columna));
			Curso curso = cmmCurso.getCurso(Dato);

			curso.setEliminado(bajaAlta);
			cmmCurso.updateCurso(curso);// baja logica

		}
		refresh(tableCursos, false);
	}
}